package com.edoomath.api.servcice.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.demo2do.core.persistence.GenericDaoSupport;
import com.demo2do.core.persistence.annotation.Dao;
import com.demo2do.core.utils.CollectionUtils;
import com.edoomath.api.dao.CourseItemDao;
import com.edoomath.api.dao.CourseMaterialCategoryDao;
import com.edoomath.api.dao.CourseMaterialDao;
import com.edoomath.api.servcice.CourseItemService;
import com.edoomath.entity.course.Course;
import com.edoomath.entity.course.CourseItem;
import com.edoomath.entity.course.CourseItemStat;
import com.edoomath.entity.course.CourseMaterail;
import com.edoomath.entity.course.CourseMaterialCategory;
import com.edoomath.entity.course.CourseText;
import com.edoomath.entity.usercourse.UserCourseItem;
import com.edoomath.entity.usercourse.UserCourseTask;

/**
 * 
 * @author mohanlan
 *
 */
@Service("courseItemService")
public class CourseItemServiceImpl implements CourseItemService {
	
	@Autowired
	private GenericDaoSupport genericDaoSupport; 
    
    @Dao
    private CourseItemDao courseItemDao;
    
    @Dao
	private CourseMaterialDao courseMaterialDao;
    
    @Dao
    private CourseMaterialCategoryDao courseMaterialCategoryDao;
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#loadCourseItem(java.lang.Long)
     */
    public CourseItem loadCourseItem(Long id) {
        return courseItemDao.loadCourseItem(id);
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#loadCourseItemStat(com.edoomath.entity.course.CourseItem)
     */
    public CourseItemStat loadCourseItemStat(CourseItem courseItem) {
    	return courseItemDao.loadCourseItemStat(courseItem);
    }
    

    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#listCourseItem(com.edoomath.entity.course.Course)
     */
    public List<CourseItem> listCourseItem(Course course) {
        return courseItemDao.list(course);
    }

    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#listCourseMaterial(java.lang.Long)
     */
    public Map<String, List<CourseMaterail>> listCourseMaterial(Long courseItemId) {
        List<CourseMaterail> materails = courseMaterialDao.listMaterials(courseItemId);
        return CollectionUtils.constructMapValues(materails, "type");
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#listCourseMaterial(com.edoomath.entity.course.CourseItem, java.lang.String)
     */
    public List<CourseMaterail> listCourseMaterial(CourseItem courseItem, List<String> types) {
    	return courseMaterialDao.listMaterials(courseItem, types);
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#listCourseMaterial(com.edoomath.entity.course.CourseMaterialCategory)
     */
    public List<CourseMaterail> listCourseMaterial(CourseMaterialCategory courseMaterialCategory) {
    	return courseMaterialDao.listMaterials(courseMaterialCategory);
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#loadCourseMaterial(com.edoomath.entity.course.CourseMaterialCategory)
     */
    public CourseMaterail loadCourseMaterial(CourseMaterialCategory courseMaterialCategory) {
    	return courseMaterialDao.loadMaterial(courseMaterialCategory);
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#listCourseMaterialCategory(com.edoomath.entity.course.CourseItem)
     */
    public List<CourseMaterialCategory> listCourseMaterialCategory(CourseItem courseItem) {
    	return courseMaterialCategoryDao.list(courseItem);
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#loadCourseMaterialCategory(java.lang.Long)
     */
    public CourseMaterialCategory loadCourseMaterialCategory(Long id) {
    	return genericDaoSupport.searchForObject("FROM CourseMaterialCategory WHERE disabled = false AND id = :id", "id", id, CourseMaterialCategory.class);
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#listCourseTask(com.edoomath.entity.usercourse.UserCourseItem)
     */
    public List<UserCourseTask> listCourseTask(UserCourseItem userCourseItem) {
    	return courseItemDao.listUserCourseTask(userCourseItem.getUserCourse(), userCourseItem.getCourseItem());
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#loadCourseMaterialZip(com.edoomath.entity.course.CourseItem, java.lang.String)
     */
    public CourseMaterail loadCourseMaterialZip(CourseItem courseItem, String type) {
    	return courseMaterialDao.loadMaterialsZip(courseItem, type);
    }
    
    /*
     * (non-Javadoc)
     * @see com.edoomath.api.servcice.CourseItemService#listCourseText(com.edoomath.entity.course.CourseItem, java.lang.String)
     */
    public List<CourseText> listCourseText(CourseItem courseItem, String type) {
    	return courseItemDao.listTexts(courseItem, type);
    }
}
